/*
// Licensed to Julian Hyde under one or more contributor license
// agreements. See the NOTICE file distributed with this work for
// additional information regarding copyright ownership.
//
// Julian Hyde licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
 */
package org.olap4j.driver.xmla;

import org.olap4j.*;
import org.olap4j.driver.xmla.proxy.XmlaOlap4jProxy;

import java.io.InputStream;
import java.io.Reader;
import java.sql.*;
import java.util.*;

/**
 * Abstract JDBC classes, for JDBC 4.0 and 4.1.
 * 
 * @author jhyde
 */
class FactoryJdbc4Plus {
	private FactoryJdbc4Plus() {
	}

	static abstract class AbstractEmptyResultSet extends EmptyResultSet {
		/**
		 * Creates an AbstractEmptyResultSet.
		 * 
		 * @param olap4jConnection
		 *            Connection
		 * @param headerList
		 *            Column names
		 * @param rowList
		 *            List of row values
		 */
		AbstractEmptyResultSet(XmlaOlap4jConnection olap4jConnection, List<String> headerList,
				List<List<Object>> rowList) {
			super(olap4jConnection, headerList, rowList);
		}

		// implement java.sql.ResultSet methods
		// introduced in JDBC 4.0/JDK 1.6

		public RowId getRowId(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public RowId getRowId(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateRowId(int columnIndex, RowId x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateRowId(String columnLabel, RowId x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public int getHoldability() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public boolean isClosed() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNString(int columnIndex, String nString) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNString(String columnLabel, String nString) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public NClob getNClob(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public NClob getNClob(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public SQLXML getSQLXML(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public SQLXML getSQLXML(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public String getNString(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public String getNString(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Reader getNCharacterStream(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Reader getNCharacterStream(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(int columnIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(int columnIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}
	}

	static abstract class AbstractConnection extends XmlaOlap4jConnection implements OlapConnection {
		/**
		 * Creates an AbstractConnection.
		 * 
		 * @param factory
		 *            Factory
		 * @param driver
		 *            Driver
		 * @param proxy
		 *            Proxy
		 * @param url
		 *            URL
		 * @param info
		 *            Extra properties
		 * @throws SQLException
		 *             on error
		 */
		AbstractConnection(Factory factory, XmlaOlap4jDriver driver, XmlaOlap4jProxy proxy, String url, Properties info)
				throws SQLException {
			super(factory, driver, proxy, url, info);
		}

		public OlapStatement createStatement() {
			return super.createStatement();
		}

		public OlapDatabaseMetaData getMetaData() {
			return super.getMetaData();
		}

		// implement java.sql.Connection methods
		// introduced in JDBC 4.0/JDK 1.6

		public Clob createClob() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Blob createBlob() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public NClob createNClob() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public SQLXML createSQLXML() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public boolean isValid(int timeout) throws SQLException {
			return !isClosed();
		}

		public void setClientInfo(String name, String value) throws SQLClientInfoException {
			throw new UnsupportedOperationException();
		}

		public void setClientInfo(Properties properties) throws SQLClientInfoException {
			throw new UnsupportedOperationException();
		}

		public String getClientInfo(String name) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Properties getClientInfo() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
			throw new UnsupportedOperationException();
		}
	}

	static abstract class AbstractCellSet extends XmlaOlap4jCellSet {
		/**
		 * Creates an AbstractCellSet.
		 * 
		 * @param olap4jStatement
		 *            Statement
		 * @throws OlapException
		 *             on error
		 */
		AbstractCellSet(XmlaOlap4jStatement olap4jStatement) throws OlapException {
			super(olap4jStatement);
		}

		public CellSetMetaData getMetaData() {
			return super.getMetaData();
		}

		// implement java.sql.CellSet methods
		// introduced in JDBC 4.0/JDK 1.6

		public RowId getRowId(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public RowId getRowId(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateRowId(int columnIndex, RowId x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateRowId(String columnLabel, RowId x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public int getHoldability() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public boolean isClosed() throws SQLException {
			return closed;
		}

		public void updateNString(int columnIndex, String nString) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNString(String columnLabel, String nString) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public NClob getNClob(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public NClob getNClob(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public SQLXML getSQLXML(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public SQLXML getSQLXML(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public String getNString(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public String getNString(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Reader getNCharacterStream(int columnIndex) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public Reader getNCharacterStream(String columnLabel) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(int columnIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateClob(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(int columnIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void updateNClob(String columnLabel, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}
	}

	static abstract class AbstractPreparedStatement extends XmlaOlap4jPreparedStatement {
		/**
		 * Creates a AbstractPreparedStatement.
		 * 
		 * @param olap4jConnection
		 *            Connection
		 * @param mdx
		 *            MDX query text
		 * @throws OlapException
		 *             on error
		 */
		AbstractPreparedStatement(XmlaOlap4jConnection olap4jConnection, String mdx) throws OlapException {
			super(olap4jConnection, mdx);
		}

		public CellSetMetaData getMetaData() {
			return super.getMetaData();
		}

		// implement java.sql.PreparedStatement methods
		// introduced in JDBC 4.0/JDK 1.6

		public void setRowId(int parameterIndex, RowId x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setNString(int parameterIndex, String value) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setNClob(int parameterIndex, NClob value) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setClob(int parameterIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setAsciiStream(int parameterIndex, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setBinaryStream(int parameterIndex, InputStream x, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setClob(int parameterIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public void setNClob(int parameterIndex, Reader reader) throws SQLException {
			throw new UnsupportedOperationException();
		}
	}

	static abstract class AbstractDatabaseMetaData extends XmlaOlap4jDatabaseMetaData {
		/**
		 * Creates an AbstractDatabaseMetaData.
		 * 
		 * @param olap4jConnection
		 *            Connection
		 */
		AbstractDatabaseMetaData(XmlaOlap4jConnection olap4jConnection) {
			super(olap4jConnection);
		}

		public OlapConnection getConnection() {
			return super.getConnection();
		}

		// implement java.sql.DatabaseMetaData methods
		// introduced in JDBC 4.0/JDK 1.6

		public RowIdLifetime getRowIdLifetime() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException {
			throw new UnsupportedOperationException();
		}

		public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public boolean autoCommitFailureClosesAllResultSets() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public ResultSet getClientInfoProperties() throws SQLException {
			throw new UnsupportedOperationException();
		}

		public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern)
				throws SQLException {
			throw new UnsupportedOperationException();
		}

		public ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern,
				String columnNamePattern) throws SQLException {
			throw new UnsupportedOperationException();
		}
	}
}

// End FactoryJdbc4Plus.java
